
https://leetcode.cn/problems/0i0mDW/description/
//class Solution {
//public:
//    int minPathSum(vector<vector<int>>& grid) {
//
//        int m = grid.size();
//        int n = grid[0].size();
//
//        vector<vector<int>> dp(m + 1, vector<int>(n + 1, 0x3f3f3f3f));
//        dp[0][1] = dp[1][0] = 0;
//
//        for (int i = 1; i <= m; i++) {
//            for (int j = 1; j <= n; j++) {
//                dp[i][j] = min(dp[i - 1][j], dp[i][j - 1]) + grid[i - 1][j - 1];
//            }
//        }
//        return dp[m][n];
//    }
//};

https://leetcode.cn/problems/minimum-falling-path-sum/description/
//class Solution {
//public:
//    int minFallingPathSum(vector<vector<int>>& matrix) {
//        int m = matrix.size();
//        int n = m;
//        vector<vector<int>> dp(m + 1, vector<int>(n + 2, 0x3f3f3f3f));
//        for (int i = 0; i < m + 2; i++) {
//            dp[0][i] = 0;
//        }
//        int min1 = 0x3f3f3f3f;
//
//        for (int i = 1; i <= m; i++) {
//            for (int j = 1; j <= n; j++) {
//                dp[i][j] = matrix[i - 1][j - 1] + min(dp[i - 1][j - 1], min(dp[i - 1][j], dp[i - 1][j + 1]));
//                if (i == m) {
//                    min1 = min(dp[i][j], min1);
//                }
//            }
//        }
//        return min1;
//    }
//};


https://leetcode.cn/problems/li-wu-de-zui-da-jie-zhi-lcof/description/
//class Solution {
//public:
//    int jewelleryValue(vector<vector<int>>& frame) {
//        int m = frame.size();
//        int n = frame[0].size();
//        vector<vector<int>> dp(m + 1, vector<int>(n + 1));
//        for (int i = 1; i <= m; i++) {
//            for (int j = 1; j <= n; j++) {
//                dp[i][j] = frame[i - 1][j - 1] + max(dp[i - 1][j], dp[i][j - 1]);
//            }
//        }
//        return dp[m][n];
//    }
//};

https://leetcode.cn/problems/unique-paths-ii/description/
//class Solution {
//public:
//    int uniquePathsWithObstacles(vector<vector<int>>& ob) {
//        int m = ob.size();
//        int n = ob[0].size();
//
//        vector<vector<int>> dp(m + 1, vector<int>(n + 1));
//        dp[0][1] = 1;
//        for (int i = 1; i <= m; i++) {
//            for (int j = 1; j <= n; j++) {
//                if (ob[i - 1][j - 1] == 0) {
//                    dp[i][j] = dp[i - 1][j] + dp[i][j - 1];
//                }
//            }
//        }
//        return dp[m][n];
//    }
//};

https://leetcode.cn/problems/2AoeFn/description/
//class Solution {
//public:
//
//    int vis[101][101];
//    int uniquePaths(int m, int n) {
//        memset(vis, 0, sizeof vis);
//        return dfs(m, n);
//    }
//
//    int dfs(int i, int j) {
//
//        if (vis[i][j] != 0) {
//            return vis[i][j];
//        }
//        if (i == 0 || j == 0) {
//            return 0;
//        }
//        if (i == 1 && j == 1) {
//            vis[i][j] = 1;
//            return 1;
//        }
//
//        vis[i][j] = dfs(i - 1, j) + dfs(i, j - 1);
//        return vis[i][j];
//    }
//};